package Proxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

public class ProxyUtil {
    public static <T> T getProxy(T obj) {
        return (T) Proxy.newProxyInstance(obj.getClass().getClassLoader(),
                obj.getClass().getInterfaces(), new InvocationHandler() {
                    @Override
                    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                        //参数一:代理对象本身，一般不管
                        //参数二：正在被代理的方法
                        //参数三：被代理的方法，应传入的参数

                        long time1=System.currentTimeMillis();
                        //触发真正的业务功能
                        Object result=method.invoke(obj,args);
                        long time2=System.currentTimeMillis();
                        System.out.println(method.getName()+"方法耗时： "+(time2-time1)/1000.0+"s");
                        //业务功能方法执行的结果返回给调用者
                        return result;

                    }
                }
        );
    }
}
